<?php
// roles/models/DbTable/Seccionfuncional.php

/**
 * Clase de la tabla seccionfuncional.
 */
class Roles_Model_DbTable_Seccionfuncional extends Zend_Db_Table_Abstract {
    /** Table name */
    protected $_name    = 'seccionfuncional';
    protected $_primary = 'codseccion';
    protected $_sequence = 'seq_seccionfuncional';
    protected $_rowClass = 'App_Audit_Row';
	
    /**
     * Devuelve el objeto Zend_Db_Select con una consulta a todos los registros de la
     * tabla seccionfuncional
     * @return Zend_Db_Select
     */
    public function getSelectFetchAll($codseccion="",$cod_padre_perfil="") {
    	
    	$cond_padre = "";
		if (!empty($cod_padre_perfil)){
			$cond_padre = " AND codseccion IN (SELECT codseccion FROM perfilrol WHERE codrol={$cod_padre_perfil}) ";
		}
		
		$columns=array('*');
		$orderby = array ('codseccion');
    	
    	$select = $this->select(self::SELECT_WITH_FROM_PART)
//    				->columns($columns)
    				->where("codpadre IS NULL {$cond_padre}")
    				->order($orderby);
    	if (!empty($codseccion)){
    		$select = $this->select(self::SELECT_WITH_FROM_PART)
//    				->columns($columns)
    				->where("codpadre = '{$codseccion}' {$cond_padre} ")
    				->order($orderby);
    	}
    	return $select->query()->fetchAll();
	}
	
	function tiene_hijos($codseccion){
		return $this->getAdapter()->fetchOne("SELECT count(*) FROM seccionfuncional WHERE codpadre={$codseccion}") ;
	}
	
	/**
     * Retorna un arreglo con los padres de un menu
     * Util cuando se estan asignando los permisos a un rol
     *
     */
	public function consultaPadres($codigo){
//		$sql="SELECT codpadre FROM seccionfuncional WHERE codseccion=? ORDER BY codseccion";
		$columns='codpadre';
		$orderby = array ('codseccion');
		$select = $this->select(self::SELECT_WITH_FROM_PART)
					->columns($columns)
    				->where("codseccion=?",$codigo)
    				->order($orderby);
    	return $select->query()->fetchAll();
	}
	
	public function getFuncionalidadesComponentesPorRol($codrol,$codpadre="IS NULL") {
		if($codpadre=="IS NULL"){
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilrol", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codrol=?",$codrol)
						->where("codpadre IS NULL");
		}
		elseif($codpadre=="IS NOT NULL"){
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilrol", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codrol=?",$codrol)
						->where("codpadre IS NOT NULL");
		}
		else{
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilrol", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codrol=?",$codrol)
						->where("codpadre=?",$codpadre);
		}
		$select->setIntegrityCheck(false);
		//Zend_Debug::dump($select->__toString());
		return $select->query()->fetchAll();
	}
	
	public function getFuncionalidadesPorRol($codrol) {
		$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilrol", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codrol=?",$codrol);
		$select->setIntegrityCheck(false);
//		Zend_Debug::dump($select->__toString());
		return $select->query()->fetchAll();
	}
	
	public function getFuncionalidadesPorUsuario($codusuario) {
		$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilusuario", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codusuario=?",$codusuario);
		$select->setIntegrityCheck(false);
		//Zend_Debug::dump($select->__toString());
		return $select->query()->fetchAll();
	}
	
	function obtenerSeccionesPadre($arr_id) {
		$stmt = $this->select(self::SELECT_WITH_FROM_PART)
						->where("codpadre IS NULL")
						->order("codseccion")
						->query();
						
		$select = $this->select(self::SELECT_WITH_FROM_PART)
						->where("codpadre=?")
						->where("id IN ('".implode("','",$arr_id)."')")
						->order("codseccion");
		
		$arr_padres = array();
		while($row = $stmt->fetch()) {
			$cols = $this->getAdapter()->fetchCol($select, array($row['codseccion']));
			if(count($cols) > 0) {
				$arr_tmp = array();
				$arr_tmp["codseccion"] = $row["codseccion"];
				$arr_tmp["nombre"] = $row["nombre"];
				$arr_tmp["id"] = $row["id"];
				$arr_tmp["url"] = $row["url"];
				//$arr_tmp["url2"] = $row["url2"];
				$arr_tmp["hijos"] = $cols;
				$arr_padres[] = $arr_tmp;
			}
		}
						
		return $arr_padres;
	}
	
	//Asignacion perfiles a usuarios
    public function getFuncionalidadesPorRolyUsuario($codrol,$codusuario) {
	    /*
	$sql="SELECT sf.codseccion, pr.ver, pr.crear, pr.modificar, pr.eliminar ";
	$sql.="FROM seccionfuncional sf INNER JOIN perfilrol pr ON sf.codseccion=pr.codseccion WHERE pr.codrol IN (";
	$sql.="SELECT rol.codrol FROM rol INNER JOIN rolesusuarios ON rol.codrol=rolesusuarios.codrol WHERE rolesusuarios.codusuario=?  ";
	$sql.=") ";
	     */
        $Roles = new Roles_Model_Roles();
        $arrRolesPorUsuario=$Roles->getRolesPorUsuarioCol($codusuario);
        $tuplaRolesPorUsuario=implode(",",$arrRolesPorUsuario);
		$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinUsing("perfilrol", "codseccion", array("ver","crear","modificar","eliminar"))
						->where("codrol IN ({$tuplaRolesPorUsuario})");
		$select->setIntegrityCheck(false);
		//Zend_Debug::dump($select->__toString());
		return $select->query()->fetchAll();
	}
	
    public function getFuncionalidadesComponentesPorRolyUsuario($codusuario,$codpadre="IS NULL") {
		if($codpadre=="IS NULL"){
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinLeft("perfilusuario", "seccionfuncional.codseccion=perfilusuario.codseccion AND codusuario={$codusuario}", array("ver","crear","modificar","eliminar"))
						->where("codpadre IS NULL");
		}
		elseif($codpadre=="IS NOT NULL"){
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinLeft("perfilusuario", "seccionfuncional.codseccion=perfilusuario.codseccion AND codusuario={$codusuario}", array("ver","crear","modificar","eliminar"))
						->where("codpadre IS NOT NULL");
		}
		else{
			$select = $this->select(self::SELECT_WITH_FROM_PART)
						->joinLeft("perfilusuario", "seccionfuncional.codseccion=perfilusuario.codseccion AND codusuario={$codusuario}", array("ver","crear","modificar","eliminar"))
						->where("codpadre=?",$codpadre);
		}
		$select->setIntegrityCheck(false);
		//Zend_Debug::dump($select->__toString());
		return $select->query()->fetchAll();
	}
		
}//fin de la clase
